Traditional implementations of object-storage mapping frameworks focus on enterprise client/server databases and only allow for a fixed configuration of databases or persistent data stores. In addition, in a typical prior art system, relationships between data objects are defined rigidly, e.g., using identifiers such as primary keys, pointers, etc. Relationships that are implemented using such identifiers between objects are very explicit. Thus, if for example, a pointer exists from a first type of object to second type of object and even one instance of an object of the second type becomes unexpectedly unavailable, such that the relationship is no longer valid for the corresponding instance of an object of the first type, the relationship fails for all associated objects of the affected types, resulting in a broader failure of one or more client contexts or other applications or processes that had been using the affected objects.
In some modern environments, the set of available data objects may change dynamically during runtime, e.g., as data sources (removable media, mobile systems and devices, etc.) are added or removed from access via a network. As such, there is a need for a way to define and manage more flexibly relationships to target data objects, including across multiple and potentially dynamically changing persistent data stores, so that processes associated with such relationships do not fail as the universe of available data objects changes at runtime.